home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / TEMP / GNU / bison / ErrorRepor < prev    next >
Text File  |  1995-06-28  |  2KB  |  54 lines

  1. Error Reporting
  2. Previous: <Lexical=>Lexical> * Next: <Action Features=>ActionFeat> * Up: <Interface=>Interface>
  3.  
  4. #Wrap on
  5. {fH3}The Error Reporting Function {fCode}yyerror{f}{f}
  6.  
  7. The Bison parser detects a {fUnderline}parse error{f} or {fUnderline}syntax error{f}
  8. whenever it reads a token which cannot satisfy any syntax rule.  A
  9. action in the grammar can also explicitly proclaim an error, using the
  10. macro {fCode}YYERROR{f} (\*Note <Action Features=>ActionFeat>: Special Features for Use in Actions).
  11.  
  12. The Bison parser expects to report the error by calling an error
  13. reporting function named {fCode}yyerror{f}, which you must supply.  It is
  14. called by {fCode}yyparse{f} whenever a syntax error is found, and it
  15. receives one argument.  For a parse error, the string is normally
  16. {fCode}"parse error"{f}.
  17.  
  18. If you define the macro {fCode}YYERROR\_VERBOSE{f} in the Bison declarations
  19. section (\*Note <Bison Declarations=>BisonDecla>: The Bison Declarations Section), then Bison provides a more verbose
  20. and specific error message string instead of just plain {fCode}"parse
  21. error"{f}.  It doesn't matter what definition you use for
  22. {fCode}YYERROR\_VERBOSE{f}, just whether you define it.
  23.  
  24. The parser can detect one other kind of error: stack overflow.  This
  25. happens when the input contains constructions that are very deeply
  26. nested.  It isn't likely you will encounter this, since the Bison
  27. parser extends its stack automatically up to a very large limit.  But
  28. if overflow happens, {fCode}yyparse{f} calls {fCode}yyerror{f} in the usual
  29. fashion, except that the argument string is {fCode}"parser stack
  30. overflow"{f}.
  31.  
  32. The following definition suffices in simple programs:
  33.  
  34. #Wrap off
  35. #fCode
  36. yyerror (s)
  37.      char \*s;
  38. \{
  39.   fprintf (stderr, "%s\\n", s);
  40. \}
  41. #f
  42. #Wrap on
  43.  
  44. After {fCode}yyerror{f} returns to {fCode}yyparse{f}, the latter will attempt
  45. error recovery if you have written suitable error recovery grammar rules
  46. (\*Note <Error Recovery=>ErrorRecov>).  If recovery is impossible, {fCode}yyparse{f} will
  47. immediately return 1.
  48.  
  49. The variable {fCode}yynerrs{f} contains the number of syntax errors
  50. encountered so far.  Normally this variable is global; but if you
  51. request a pure parser (\*Note <Pure Decl=>PureDecl>: A Pure (Reentrant) Parser) then it is a local variable
  52. which only the actions can access.
  53.  
  54.